/**
 * @file KEYS.h
 * @brief 按键驱动头文件
 * @details 定义按键相关的宏定义、函数声明和数据结构
 * @author 开发者
 * @date 创建日期
 */

#ifndef __KEYS_H__
#define __KEYS_H__

/* 系统头文件包含 */
#include "gd32f4xx.h"         // GD32F4xx系列MCU标准外设库
#include "uart.h"             // 串口驱动头文件
#include <stdio.h>            // 标准输入输出库
#include "FreeRTOS.h"         // FreeRTOS核心头文件
#include "task.h"             // FreeRTOS任务管理头文件
#include "queue.h"            // FreeRTOS队列管理头文件
#include "semphr.h"           // FreeRTOS信号量头文件
#include "event_groups.h"     // FreeRTOS事件组头文件

/* 位操作宏定义 */
#define BIT0 (1<<0)           // 第0位掩码
#define BIT1 (1<<1)           // 第1位掩码
#define BIT2 (1<<2)           // 第2位掩码
#define BIT3 (1<<3)           // 第3位掩码
#define BIT4 (1<<4)           // 第4位掩码
#define BIT5 (1<<5)           // 第5位掩码

/* 按键硬件配置宏定义 */
#define KEYS_RCU RCU_GPIOC    // 按键GPIO时钟
#define KEYS_PORT GPIOC       // 按键GPIO端口
#define KEY1_PIN GPIO_PIN_0   // 按键1引脚
#define KEY2_PIN GPIO_PIN_1   // 按键2引脚
#define KEY3_PIN GPIO_PIN_2   // 按键3引脚
#define KEY4_PIN GPIO_PIN_3   // 按键4引脚

/* 按键状态读取宏定义 */
#define key_bit_get(a,b) gpio_input_bit_get(a,b)  // 获取GPIO输入位状态

/* 函数声明 */
/**
 * @brief 按键初始化函数声明
 * @details 配置按键GPIO为输入模式，使能外部中断，设置中断优先级
 */
void keys_init(void);

/**
 * @brief 按键反初始化函数声明
 * @details 禁用所有按键的外部中断
 */
void keys_deinit(void);

#endif
